package pl.register.android.database;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import pl.register.android.database.tables.*;

import java.util.Locale;

/**
 * @author Mateusz Strzelecki
 * @since 2013-04-15
 */
public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DEBUG_TAG = DatabaseHelper.class.getSimpleName();

    private int version;

    public DatabaseHelper(Context context, String name, int version) {
        super(context, name, null, version);
        this.version = version;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(DEBUG_TAG, "Tworzenie nowej bazy danych...");
        db.execSQL(CourseDBTable.Query.CREATE_TABLE);
        db.execSQL(YearDBTable.Query.CREATE_TABLE);

        db.execSQL(LessonProgramDBTable.Query.CREATE_TABLE);
        db.execSQL(ClassesTopicDBTable.Query.CREATE_TABLE);
        db.execSQL(HomeworkTopicDBTable.Query.CREATE_TABLE);
        db.execSQL(ChapterTitleDBTable.Query.CREATE_TABLE);

        db.execSQL(StudentDBTable.Query.CREATE_TABLE);
        db.execSQL(StudentClassNumberDBTable.Query.CREATE_TABLE);
        db.execSQL(StudentInYearDBTable.Query.CREATE_TABLE);

        db.execSQL(StudentGroupDBTable.Query.CREATE_TABLE);
        db.execSQL(ProgramInGroupDBTable.Query.CREATE_TABLE);
        db.execSQL(StudentInGroupsDBTable.Query.CREATE_TABLE);

        db.execSQL(LessonDBTable.Query.CREATE_TABLE);
        db.execSQL(ClassesDBTable.Query.CREATE_TABLE);
        db.execSQL(HomeworkDBTable.Query.CREATE_TABLE);
        db.execSQL(TaskDBTable.Query.CREATE_TABLE);

        db.setLocale(Locale.getDefault());
        db.setLockingEnabled(true);
        db.setVersion(version);

        Log.i(DEBUG_TAG, "Utworzono bazę danych: " + db.getPath());
        Log.i(DEBUG_TAG, "Wersja bazy danych: " + db.getVersion());
        Log.i(DEBUG_TAG, "Wielkość strony bazy danych: " + db.getPageSize());
        Log.i(DEBUG_TAG, "Maksymalna wielkość bazy danych: " + db.getMaximumSize());
        Log.i(DEBUG_TAG, "Baza jest otworzona: " + db.isOpen());
        Log.i(DEBUG_TAG, "Baza tylko do odczytu: " + db.isReadOnly());
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(CourseDBTable.Query.DROP_TABLE);
        db.execSQL(YearDBTable.Query.DROP_TABLE);

        db.execSQL(LessonProgramDBTable.Query.DROP_TABLE);
        db.execSQL(ClassesTopicDBTable.Query.DROP_TABLE);
        db.execSQL(HomeworkTopicDBTable.Query.DROP_TABLE);
        db.execSQL(ChapterTitleDBTable.Query.DROP_TABLE);

        db.execSQL(StudentDBTable.Query.DROP_TABLE);
        db.execSQL(StudentInYearDBTable.Query.DROP_TABLE);
        db.execSQL(StudentClassNumberDBTable.Query.DROP_TABLE);

        db.execSQL(StudentGroupDBTable.Query.DROP_TABLE);
        db.execSQL(ProgramInGroupDBTable.Query.DROP_TABLE);
        db.execSQL(StudentInGroupsDBTable.Query.DROP_TABLE);

        db.execSQL(LessonDBTable.Query.DROP_TABLE);
        db.execSQL(ClassesDBTable.Query.DROP_TABLE);
        db.execSQL(HomeworkDBTable.Query.DROP_TABLE);
        db.execSQL(TaskDBTable.Query.DROP_TABLE);

        Log.i(DEBUG_TAG, "Usuniecie tabel ");
        Log.d(DEBUG_TAG, "Aktualizacja bazy danych z ver." + oldVersion + " do ver." + newVersion);
        onCreate(db);
    }

}